package com.ruoyi.commodity.mapper;

import java.util.List;
import com.ruoyi.commodity.domain.Product;
import com.ruoyi.commodity.domain.vo.ProductVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 产品管理Mapper接口
 * 
 * @author ruoyi
 * @date 2023-09-09
 */
@Mapper
public interface ProductMapper 
{
    /**
     * 查询产品管理
     * 
     * @param id 产品管理主键
     * @return 产品管理
     */
    public Product selectProductById(Long id);

    /**
     * 查询产品管理列表
     * 
     * @param product 产品管理
     * @return 产品管理集合
     */
    public List<ProductVO> selectProductList(ProductVO product);

    /**
     * 批量查询
     * @param ids
     * @return
     */
    public List<Product> selectProductListById(Long[] ids);

    /**
     * 新增产品管理
     * 
     * @param product 产品管理
     * @return 结果
     */
    public int insertProduct(Product product);

    /**
     * 修改产品管理
     * 
     * @param product 产品管理
     * @return 结果
     */
    public int updateProduct(Product product);

    /**
     * 删除产品管理
     * 
     * @param id 产品管理主键
     * @return 结果
     */
    public int deleteProductById(Long id);

    /**
     * 批量删除产品管理
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteProductByIds(Long[] ids);


    /**
     * 查询sku，然后生成sku规格
     * @param oemName oem的查询条件
     * @return 结果
     */
    public String productSku(@Param("oemName") String oemName);

    /**
     * 店铺商品和本地商品关联
     * @param product
     * @return
     */
    public List<Product> selectProductBrand(Product product);

    /**
     * 销售订单下的商品（修改模式）
     * @param product
     * @return
     */
    public List<Product> selectByPlanIdAndShipmentsProductIds(Product product);

    /**
     *通过最新的时间来查询产品编号
     * @return
     */
    public String selectProNo();

    /**
     * 销售订单下的商品（新增模式）
     * @param product
     * @return
     */
    public List<Product> selectByPlanIdAndShipmentsProductIdsByAdd(Product product);

    /**
     * 停用产品列表
     * @param ids
     * @return
     */
    int disable(@Param("list") List<Long> ids);

    /**
     * 启用产品列表
     * @param ids
     * @return
     */
    int enable(@Param("list") List<Long> ids);

    /**
     * 查询 SKU 是否已存在
     */
    int countByProductSku(@Param("sku") String sku);

    /**
     * 查询最新的变体sku-号后的最大数字
     * @param baseSKU
     * @return
     */
	Integer getMaxSuffix(@Param("baseSKU") String baseSKU);

    /**
     * 组合sku拆解单独查询单个sku数据
     * @param sku
     * @return
     */
    Product selectBySku(@Param("sku") String sku);

    /**
     * 获取产品的包装清单和属性
     * @param productId
     * @return
     */
    Product selectAttributeAndPackingList(@Param("productId") Long productId);


    /**
     * 根据sku查询对应的产品尺寸和重量
     * @param skus
     * @return
     */
	List<ProductVO> selectSizeAndWeight(@Param("skus") List<String> skus);
}
